home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CICA 1993 April
/
CICA MS Windows - April 1993.iso
/
unzipped
/
util
/
wnkerm23
/
src
/
wkkmsc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-25
|
39KB
|
1,310 lines
/*
* Windows Kermit dialog box routines
*
* Copyright (c) 1990, 1991 by
* William S. Hall
* 3665 Benton Street, #66
* Santa Clara, CA 95051
*
*/
#define NOKANJI
#define NOMINMAX
#define NOATOM
#define NOSOUND
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef COLUMBIA
#include "wkasci.h"
#include "wkkerm.h"
#include "wkkdlg.h"
#else
#include "ascii.h"
#include "wnkerm.h"
#include "wnkdlg.h"
#endif
#define MAXPATHLEN 128
static char *defstring = "*.*"; /* default file type */
BOOL fOverflow;
/* local function declarations */
static void NEAR krmProtocolInit(HWND hDlg);
static void NEAR krmProtocolSet(HWND hDlg);
static void NEAR krmPacketsInit(HWND hDlg);
static void NEAR krmPacketsSet(HWND hDlg);
static void NEAR krmSetCancelFlags(HWND hDlg);
static void NEAR krmSendFileInit(HWND hDlg);
static int NEAR krmCheckSelect(HWND hDlg);
static void NEAR krmGetSendFileList(HWND hDlg, LONG lParam);
static BOOL NEAR krmListSelect(HWND hDlg, LONG lParam);
static void NEAR krmListBoxOK(HWND hDlg, LONG lParam);
static void NEAR krmPathSelect(HWND hDlg, LONG lParam);
static int NEAR GetCheckedRadioButton(HWND hDlg, WORD start, WORD end);
static int NEAR GetComboboxSelection(HWND hDlg, WORD id, char * buffer);
static int NEAR GetComboboxIndex(HWND hDlg, int id);
static char* NEAR getnamestr(char *str, int len);
static void NEAR krmGetFileInit(HWND hDlg);
static HANDLE NEAR krmGetFileSet(HWND hDlg);
static void NEAR krmCWDInit(HWND hDlg);
static HANDLE NEAR krmCWDSet(HWND hDlg);
static void NEAR krmInitRemoteBox(HWND hDlg);
static void NEAR krmRemote1ParamInit(register HWND hDlg, int mode);
static HANDLE NEAR krmRemote1ParamSet(register HWND hDlg, int mode);
static void NEAR krmRemote1ParamEnable(HWND hDlg, HWND hctl, int mode);
static HANDLE NEAR krmRemote1ParamCommand(HWND hDlg);
static HANDLE NEAR krmRemote1ParamGeneric(HWND hDlg, char cmd);
static void NEAR krmLocalInit(HWND hDlg);
static void NEAR krmLocalFilesOK(HWND hDlg);
static void NEAR krmLocalDirs(HWND hDlg, LONG lParam);
static void NEAR setoemconvert(HWND hDlg, WORD id);
/*
* krmOpenDlgBox
*
* Open a modal dialog box
*/
int FAR krmOpenDlgBox(HWND hWnd, FARPROC fpProc, WORD boxnum)
{
FARPROC fp;
BOOL result;
/* make a proc instance for the about box window function */
fp = MakeProcInstance(fpProc, Kermit.hInst);
/* create a modal dialog box */
result = DialogBox(Kermit.hInst, MAKEINTRESOURCE(boxnum),hWnd,fp);
FreeProcInstance(fp);
return result;
}
/*
* krmProtocol
*
* This dialog box sets general parameters affecting the
* Kermit protocol.
*/
BOOL FAR PASCAL krmProtocol(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
switch(message) {
case WM_INITDIALOG:
krmProtocolInit(hDlg);
break;
case WM_COMMAND:
switch(wParam) {
case IDOK:
krmProtocolSet(hDlg);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*
* krmProtocolSet
*
* In response to values chosen by the user, this
* routine sets the various protocol data structures.
* If requested, values are saved to WIN.INI
*/
static void NEAR krmProtocolSet(HWND hDlg)
{
char szAppStr[80];
char szKeyStr[80];
char szValStr[80];
KermParams.Bell = IsDlgButtonChecked(hDlg, IDD_KRM_BELL);
KermParams.Timer = IsDlgButtonChecked(hDlg, IDD_KRM_TIMER);
KermParams.DiscardPartialFile = IsDlgButtonChecked(hDlg, IDD_KRM_DISCARD);
KermParams.FileWarning = IsDlgButtonChecked(hDlg, IDD_KRM_FILEWARNING);
// KermParams.verbose = IsDlgButtonChecked(hDlg, IDD_KRM_VERBOSE);
KermParams.BlockCheckType = GetCheckedRadioButton(hDlg,
IDD_KRM_1BYTECHK,
IDD_KRM_3BYTECHK)
- IDD_KRM_1BYTECHK + 1;
GetComboboxSelection(hDlg, IDD_KRM_RETRYLIMIT, szValStr);
KermParams.RetryLimit = atoi(szValStr);
GetComboboxSelection(hDlg, IDD_KRM_SENDDELAY, szValStr);
KermParams.SendDelay = atoi(szValStr);
/* user wants to save the values, so write them to WIN.INI */
if (IsDlgButtonChecked(hDlg, IDD_KRM_SAVE)) {
LoadString(Kermit.hInst,IDS_KRM_KERMIT,szAppStr,sizeof(szAppStr));
LoadString(Kermit.hInst, IDS_KRM_TIMER, szKeyStr, sizeof(szKeyStr));
itoa(KermParams.Timer, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
/*
LoadString(Kermit.hInst, IDS_KRM_VERBOSE, szKeyStr, sizeof(szKeyStr));
itoa(KermParams.verbose, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
*/
LoadString(Kermit.hInst, IDS_KRM_DISCARD, szKeyStr, sizeof(szKeyStr));
itoa(KermParams.DiscardPartialFile, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_BELL, szKeyStr, sizeof(szKeyStr));
itoa(KermParams.Bell, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_FILEWARN, szKeyStr, sizeof(szKeyStr));
itoa(KermParams.FileWarning, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_BLOCKCHECKTYPE,
szKeyStr,sizeof(szKeyStr));
itoa(KermParams.BlockCheckType, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_RETRYLIMIT,
szKeyStr, sizeof(szKeyStr));
itoa(KermParams.RetryLimit, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_SENDDELAY,szKeyStr,sizeof(szKeyStr));
itoa(KermParams.SendDelay, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
SendMessage((HWND)(-1), WM_WININICHANGE, 0, (LONG)(LPSTR)szAppStr);
}
}
/*
* krmProtocolInit
*
* Initialize the Kermit protocol settings
* dialog box.
*/
static void NEAR krmProtocolInit(HWND hDlg)
{
register int i;
char buf[80];
CheckDlgButton(hDlg, IDD_KRM_BELL, KermParams.Bell);
CheckDlgButton(hDlg, IDD_KRM_TIMER, KermParams.Timer);
CheckDlgButton(hDlg, IDD_KRM_DISCARD, KermParams.DiscardPartialFile);
CheckDlgButton(hDlg, IDD_KRM_FILEWARNING, KermParams.FileWarning);
// CheckDlgButton(hDlg, IDD_KRM_VERBOSE, KermParams.verbose);
CheckRadioButton(hDlg, IDD_KRM_1BYTECHK, IDD_KRM_3BYTECHK,
IDD_KRM_1BYTECHK + KermParams.BlockCheckType - 1);
for (i = 1; i <= 63; i++)
SendDlgItemMessage(hDlg, IDD_KRM_RETRYLIMIT, CB_INSERTSTRING,
-1, (LONG)(LPSTR)itoa(i, buf, 10));
SendDlgItemMessage(hDlg, IDD_KRM_RETRYLIMIT, CB_SELECTSTRING,
-1, (LONG)(LPSTR)itoa(KermParams.RetryLimit, buf, 10));
for (i = 0; i <= 63; i++)
SendDlgItemMessage(hDlg, IDD_KRM_SENDDELAY, CB_INSERTSTRING,
-1, (LONG)(LPSTR)itoa(i, buf, 10));
SendDlgItemMessage(hDlg, IDD_KRM_SENDDELAY, CB_SELECTSTRING,
-1, (LONG)(LPSTR)itoa(KermParams.SendDelay, buf, 10));
}
/*
* krmPackets
*
* This dialog box sets the various Kermit packet parameters.
*/
BOOL FAR PASCAL krmPackets(HWND hDlg,unsigned message,WORD wParam,LONG lParam)
{
switch(message) {
case WM_INITDIALOG:
krmPacketsInit(hDlg);
break;
case WM_COMMAND:
switch(wParam) {
case IDOK:
krmPacketsSet(hDlg);
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*
* krmPacketsSet
*
* In response to values chosen by the user, this
* routine sets the various packet data structures.
* If requested, values are saved to WIN.INI
*/
static void NEAR krmPacketsSet(HWND hDlg)
{
char szAppStr[80];
char szKeyStr[80];
char szValStr[80];
sndparams.mark = (BYTE)GetComboboxIndex(hDlg, IDD_KRM_SENDMARK);
rcvparams.mark = (BYTE)GetComboboxIndex(hDlg, IDD_KRM_RECEIVEMARK);
sndparams.maxpktsize = (short)GetComboboxIndex(hDlg,IDD_KRM_SENDMAXSIZE)
+ KRM_MINPACKETSIZE;
rcvparams.maxpktsize = (short)GetComboboxIndex(hDlg,IDD_KRM_RECEIVEMAXSIZE)
+ KRM_MINPACKETSIZE;
sndparams.timeout = (short)GetComboboxIndex(hDlg, IDD_KRM_SENDTIMEOUT)
+ KRM_MINTIMEOUT;
rcvparams.timeout = (short)GetComboboxIndex(hDlg, IDD_KRM_RECEIVETIMEOUT)
+ KRM_MINTIMEOUT;
sndparams.padcount = (short)GetComboboxIndex(hDlg,IDD_KRM_SENDPADCOUNT);
rcvparams.padcount = (short)GetComboboxIndex(hDlg,IDD_KRM_RECEIVEPADCOUNT);
sndparams.padchar = (BYTE)GetComboboxIndex(hDlg, IDD_KRM_SENDPADCHAR);
if (sndparams.padchar >= ' ')
sndparams.padchar = DEL;
rcvparams.padchar = (BYTE)GetComboboxIndex(hDlg, IDD_KRM_RECEIVEPADCHAR);
if (rcvparams.padchar >= ' ')
sndparams.padchar = DEL;
sndparams.eol = (BYTE)GetComboboxIndex(hDlg, IDD_KRM_SENDEOL);
rcvparams.eol = (BYTE)GetComboboxIndex(hDlg, IDD_KRM_RECEIVEEOL);
sndparams.quote = (BYTE)(GetComboboxIndex(hDlg, IDD_KRM_SENDQUOTE) + '!');
if (sndparams.quote >= '?')
sndparams.quote += 30;
rcvparams.quote = (BYTE)(GetComboboxIndex(hDlg,IDD_KRM_RECEIVEQUOTE)+'!');
if (rcvparams.quote >= '?')
rcvparams.quote += 30;
if (IsDlgButtonChecked(hDlg, IDD_KRM_SAVE)) {
LoadString(Kermit.hInst,IDS_KRM_KERMIT,szAppStr,sizeof(szAppStr));
LoadString(Kermit.hInst, IDS_KRM_SENDMARK, szKeyStr, sizeof(szKeyStr));
itoa(sndparams.mark, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_RCVMARK, szKeyStr, sizeof(szKeyStr));
itoa(rcvparams.mark, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_SENDMAXLEN,szKeyStr,sizeof(szKeyStr));
itoa(sndparams.maxpktsize, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_RCVMAXLEN,szKeyStr,sizeof(szKeyStr));
itoa(rcvparams.maxpktsize, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_SENDTIMEOUT,szKeyStr,sizeof(szKeyStr));
itoa(sndparams.timeout, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_RCVTIMEOUT,szKeyStr,sizeof(szKeyStr));
itoa(rcvparams.timeout, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_SENDPADCOUNT,
szKeyStr,sizeof(szKeyStr));
itoa(sndparams.padcount, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_RCVPADCOUNT,szKeyStr,sizeof(szKeyStr));
itoa(rcvparams.padcount, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_SENDPADCHAR,szKeyStr,sizeof(szKeyStr));
itoa(sndparams.padchar, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_RCVPADCHAR,szKeyStr,sizeof(szKeyStr));
itoa(rcvparams.padchar, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_SENDEOL, szKeyStr, sizeof(szKeyStr));
itoa(sndparams.eol, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_RCVEOL, szKeyStr, sizeof(szKeyStr));
itoa(rcvparams.eol, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst,IDS_KRM_SENDQUOTE,szKeyStr,sizeof(szKeyStr));
itoa(sndparams.quote, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
LoadString(Kermit.hInst, IDS_KRM_RCVQUOTE, szKeyStr, sizeof(szKeyStr));
itoa(rcvparams.quote, szValStr, 10);
WriteProfileString(szAppStr, szKeyStr, szValStr);
SendMessage((HWND)(-1), WM_WININICHANGE, 0, (LONG)(LPSTR)szAppStr);
}
}
/*
* krmPacketsInit
*
* Initialize the Kermit packets settings
* dialog box.
*/
static void NEAR krmPacketsInit(HWND hDlg)
{
register int i;
char buf[80];
for (i = 0; i < ' '; i++) {
sprintf(buf, "CTRL-%c", '@'+i);
SendDlgItemMessage(hDlg, IDD_KRM_SENDMARK, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEMARK, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
SendDlgItemMessage(hDlg,IDD_KRM_SENDMARK,CB_SETCURSEL,sndparams.mark, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVEMARK,
CB_SETCURSEL,rcvparams.mark,0L);
for (i = KRM_MINPACKETSIZE; i <= KRM_MAXPACKETSIZE; i++) {
itoa(i, buf, 10);
SendDlgItemMessage(hDlg, IDD_KRM_SENDMAXSIZE, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEMAXSIZE, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
SendDlgItemMessage(hDlg,IDD_KRM_SENDMAXSIZE, CB_SETCURSEL,
sndparams.maxpktsize - KRM_MINPACKETSIZE, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVEMAXSIZE, CB_SETCURSEL,
rcvparams.maxpktsize - KRM_MINPACKETSIZE, 0L);
for (i = KRM_MINTIMEOUT; i <= KRM_MAXTIMEOUT; i++) {
itoa(i, buf, 10);
SendDlgItemMessage(hDlg, IDD_KRM_SENDTIMEOUT, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVETIMEOUT, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
SendDlgItemMessage(hDlg,IDD_KRM_SENDTIMEOUT, CB_SETCURSEL,
sndparams.timeout - KRM_MINTIMEOUT, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVETIMEOUT, CB_SETCURSEL,
rcvparams.timeout - KRM_MINTIMEOUT, 0L);
for (i = 0; i <= KRM_MAXPADCOUNT; i++) {
itoa(i, buf, 10);
SendDlgItemMessage(hDlg, IDD_KRM_SENDPADCOUNT, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEPADCOUNT, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
SendDlgItemMessage(hDlg,IDD_KRM_SENDPADCOUNT,CB_SETCURSEL,
sndparams.padcount, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVEPADCOUNT,CB_SETCURSEL,
rcvparams.padcount, 0L);
for (i = 0; i < ' '; i++) {
sprintf(buf, "CTRL-%c", '@'+i);
SendDlgItemMessage(hDlg, IDD_KRM_SENDPADCHAR, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEPADCHAR, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
strcpy(buf, "CTRL ?");
SendDlgItemMessage(hDlg, IDD_KRM_SENDPADCHAR, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEPADCHAR, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg,IDD_KRM_SENDPADCHAR,CB_SETCURSEL,
sndparams.padchar != DEL ? sndparams.padchar : 32, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVEPADCHAR,CB_SETCURSEL,
rcvparams.padchar != DEL ? rcvparams.padchar : 32, 0L);
for (i = 0; i < 32; i++) {
sprintf(buf, "CTRL-%c", '@'+i);
SendDlgItemMessage(hDlg, IDD_KRM_SENDEOL, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEEOL, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
SendDlgItemMessage(hDlg,IDD_KRM_SENDEOL, CB_SETCURSEL,sndparams.eol, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVEEOL,CB_SETCURSEL,rcvparams.eol,0L);
for (i = 33; i <= 126; i++) {
if ((i >= 63) && (i <= 95))
continue;
sprintf(buf, "%c", i);
SendDlgItemMessage(hDlg, IDD_KRM_SENDQUOTE, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_RECEIVEQUOTE, CB_INSERTSTRING,
-1, (LONG)(LPSTR)buf);
}
SendDlgItemMessage(hDlg,IDD_KRM_SENDQUOTE, CB_SETCURSEL,
(33 <= sndparams.quote) && (sndparams.quote < 63) ?
sndparams.quote - 33 : sndparams.quote - 63, 0L);
SendDlgItemMessage(hDlg,IDD_KRM_RECEIVEQUOTE, CB_SETCURSEL,
(33 <= rcvparams.quote) && (rcvparams.quote < 63) ?
rcvparams.quote - 33 : rcvparams.quote - 63, 0L);
}
/*
* krmSendFileProc
*
* This dialog box allows the user to choose a list of
* files to send to a remote Kermit.
*/
BOOL FAR PASCAL krmSendFileProc(HWND hDlg,unsigned message,
WORD wParam,LONG lParam)
{
switch (message) {
case WM_INITDIALOG:
krmSendFileInit(hDlg);
break;
case WM_COMMAND:
switch (wParam) {
/* turn off SEND button if no files selected */
case IDD_KRM_LISTSELECT:
if (HIWORD(lParam) == LBN_SELCHANGE)
EnableWindow(GetDlgItem(hDlg, IDD_KRM_SEND),
krmListSelect(hDlg, lParam));
break;
/* in this dialog box, IDOK sets selections */
case IDOK:
krmListBoxOK(hDlg, lParam);
EnableWindow(GetDlgItem(hDlg, IDD_KRM_SEND),
krmListSelect(hDlg, lParam));
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
/* get selected files into a buffer */
case IDD_KRM_SEND:
krmGetSendFileList(hDlg, lParam);
break;
/* move to another directory */
case IDD_KRM_PATHSELECT:
krmPathSelect(hDlg, lParam);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*
* krmListSelect
*
* Look through the file name list box for a selection.
*/
static BOOL NEAR krmListSelect(HWND hDlg, LONG lParam)
{
BOOL select = FALSE;
register int i;
register int num = (int)SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT,
LB_GETCOUNT, 0, 0L);
for (i = 0; i < num; i++) {
select = (BOOL)SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT,
LB_GETSEL, i, 0L);
if (select)
break;
}
return select;
}
/*
* krmPathSelect
*
* Move to a new directory in the Send File dialog box.
*/
static void NEAR krmPathSelect(HWND hDlg, LONG lParam)
{
char buf[MAXPATHLEN];
char str[MAXPATHLEN];
int len;
if (HIWORD(lParam) == LBN_SELCHANGE) {
len = GetDlgItemText(hDlg, IDD_KRM_EDITSELECT,(LPSTR)str,80);
DlgDirSelect(hDlg, (LPSTR)buf, IDD_KRM_PATHSELECT);
if (strchr(str,'*') || strchr(str,'?'))
strcat(buf,getnamestr(str,len));
else
strcat(buf, defstring);
SetDlgItemText(hDlg, IDD_KRM_EDITSELECT, (LPSTR)buf);
}
else if (HIWORD(lParam) == LBN_DBLCLK) {
GetDlgItemText(hDlg, IDD_KRM_EDITSELECT,(LPSTR)buf,80);
DlgDirList(hDlg, buf, IDD_KRM_LISTSELECT,IDD_KRM_PATHDISPLAY, 0);
DlgDirList(hDlg, buf,IDD_KRM_PATHSELECT,IDD_KRM_PATHDISPLAY,0xC010);
SetDlgItemText(hDlg, IDD_KRM_EDITSELECT, (LPSTR)buf);
}
}
/*
* krmSendFileInit
*
* Initialize the Send File Select dialog box
*/
static void NEAR krmSendFileInit(HWND hDlg)
{
char buf[10];
strcpy(buf, defstring);
DlgDirList(hDlg, buf, IDD_KRM_LISTSELECT,IDD_KRM_PATHDISPLAY, 0);
DlgDirList(hDlg, buf, IDD_KRM_PATHSELECT,IDD_KRM_PATHDISPLAY, 0xC010);
SetDlgItemText(hDlg, IDD_KRM_EDITSELECT, (LPSTR)buf);
SendDlgItemMessage(hDlg, IDD_KRM_EDITSELECT,EM_LIMITTEXT,128,0L);
EnableWindow(GetDlgItem(hDlg, IDD_KRM_SEND), FALSE);
setoemconvert(hDlg, IDD_KRM_EDITSELECT);
}
/*
* krmCheckSelect
*
* Count the number of files selected in the Send File Selection
* dialog box.
*/
static int NEAR krmCheckSelect(HWND hDlg)
{
register int num, i;
register int count = 0;
num = (int)SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT,LB_GETCOUNT,0,0L);
for (i = 0; i < num; i++)
if (SendDlgItemMessage(hDlg,IDD_KRM_LISTSELECT,LB_GETSEL,(WORD)i,0L))
count += 1;
return count;
}
/*
* krmGetSendFileList
*
* Read the list box for the names of the files selected
* to be sent by Kermit and store them in a locally allocated buffer
* as a single string delimited by spaces.
*/
static void NEAR krmGetSendFileList(HWND hDlg, LONG lParam)
{
char buf[MAXPATHLEN];
int count, i, num;
count = krmCheckSelect(hDlg);
if (count > 0) {
Kermit.hFilelist = LocalAlloc(LPTR, count * 13);
if (Kermit.hFilelist != NULL) {
Kermit.pFilelist = LocalLock(Kermit.hFilelist);
num = (int)SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT,
LB_GETCOUNT,0,0L);
for (i = 0; i < num; i++) {
if (SendDlgItemMessage(hDlg,IDD_KRM_LISTSELECT,
LB_GETSEL,(WORD)i,0L)) {
SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT,LB_GETTEXT,
(WORD)i, (LONG)(LPSTR)buf);
strcat(Kermit.pFilelist, buf);
strcat(Kermit.pFilelist, " ");
}
}
}
else
count = 0;
}
if (count == 0) {
/* no files selected or local alloc error */
}
EndDialog(hDlg,count);
}
/*
* krmListBoxOK
*
* If user chooses the SELECT button (IDOK), highlight those files
* which match the specification in the associated edit select box.
* If nothing selected, remove all highlighting.
*/
static void NEAR krmListBoxOK(HWND hDlg, LONG lParam)
{
char buf[MAXPATHLEN];
int validsspec, count;
OFSTRUCT myoff;
int hfile;
char oldpath[MAXPATHLEN];
char *ptr;
/* if nothing in the edit box */
if (GetDlgItemText(hDlg, IDD_KRM_EDITSELECT,(LPSTR)buf,sizeof(buf)) == 0)
/* remove highlighting from file list box */
SendDlgItemMessage(hDlg,IDD_KRM_LISTSELECT,LB_SETSEL,FALSE,(LONG)(-1));
else {
/* otherwise, save the path */
GetDlgItemText(hDlg, IDD_KRM_PATHDISPLAY,(LPSTR)oldpath,128);
/* see if valid search spec */
SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT, WM_SETREDRAW, FALSE, 0L);
SendDlgItemMessage(hDlg, IDD_KRM_PATHSELECT, WM_SETREDRAW, FALSE, 0L);
validsspec = DlgDirList(hDlg,buf,IDD_KRM_LISTSELECT,
IDD_KRM_PATHDISPLAY,0);
SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT, WM_SETREDRAW, TRUE, 0L);
SendDlgItemMessage(hDlg, IDD_KRM_PATHSELECT, WM_SETREDRAW, TRUE, 0L);
/* if valid, get the new path */
if (validsspec) {
/* buf modified, so update it */
SetDlgItemText(hDlg, IDD_KRM_EDITSELECT, (LPSTR)buf);
GetDlgItemText(hDlg, IDD_KRM_PATHDISPLAY, (LPSTR)buf, sizeof(buf));
/* if the same as before */
if (strcmp(oldpath, buf) == 0)
/* select the whole list box */
SendDlgItemMessage(hDlg,IDD_KRM_LISTSELECT,
LB_SETSEL,TRUE,(LONG)(-1));
else {
/* update the directory change box */
SendDlgItemMessage(hDlg,IDD_KRM_LISTSELECT,
LB_SETSEL,FALSE,(LONG)(-1));
DlgDirList(hDlg,(LPSTR)buf,IDD_KRM_PATHSELECT,
IDD_KRM_PATHDISPLAY, 0xC010);
}
/* not a valid search spec */
} else {
/* clear box */
SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT, LB_RESETCONTENT,0,0L);
/* see if it exists */
hfile = OpenFile((LPSTR)buf, (OFSTRUCT FAR *)&myoff, OF_EXIST);
if (hfile != -1) {
/* get the file name and add it to list box */
ptr = strrchr(myoff.szPathName,'\\') + 1;
SendDlgItemMessage(hDlg, IDD_KRM_LISTSELECT,LB_ADDSTRING,0,
(LONG)(LPSTR)ptr);
/* get the pathname */
strcpy(buf, myoff.szPathName);
count = strlen(buf) - strlen(ptr);
buf[count] = NUL;
/* select it */
SendDlgItemMessage(hDlg,IDD_KRM_LISTSELECT,LB_SETSEL,TRUE,-1L);
/* update the path select box */
SetDlgItemText(hDlg, IDD_KRM_EDITSELECT, (LPSTR)ptr);
DlgDirList(hDlg,buf,IDD_KRM_PATHSELECT,
IDD_KRM_PATHDISPLAY,0xC010);
}
}
}
/* select text in edit box */
SendDlgItemMessage(hDlg,IDD_KRM_EDITSELECT,EM_SETSEL,0,MAKELONG(0,32767));
}
/*
* krmXferDlgBox
*
* Show the progress of the file transfer
*/
BOOL FAR PASCAL krmXferDlgBox(HWND hDlg,unsigned message,
WORD wParam,LONG lParam)
{
char buf[40];
FARPROC fp;
switch (message) {
case WM_INITDIALOG:
if (Kermit.mode == IDM_KRM_SEND) {
LoadString(Kermit.hInst,IDS_KRM_SENDING, buf, sizeof(buf));
SetDlgItemText(hDlg, IDD_KRM_OPERATION, buf);
}
break;
case WM_COMMAND:
switch (wParam) {
case IDCANCEL:
if (Kermit.InTransfer) {
fp = MakeProcInstance((FARPROC)krmCancelBoxProc,
Kermit.hInst);
DialogBox(Kermit.hInst,
MAKEINTRESOURCE(DT_KRM_CANCEL),hDlg,fp);
FreeProcInstance(fp);
}
else {
DestroyWindow(hDlg);
Kermit.hWndXfer = NULL;
}
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
BOOL FAR PASCAL krmXferRemote(HWND hDlg,unsigned message,
WORD wParam,LONG lParam)
{
FARPROC fp;
switch (message) {
case WM_INITDIALOG:
krmInitRemoteBox(hDlg);
fOverflow = FALSE;
break;
case WM_DESTROY:
Kermit.hWndXfer = NULL;
break;
case WM_COMMAND:
switch (wParam) {
case IDD_KRM_REMOTEDATA:
if (HIWORD(lParam) == EN_MAXTEXT)
fOverflow = TRUE;
break;
case IDCANCEL:
if (Kermit.InTransfer) {
fp = MakeProcInstance((FARPROC)krmCancelBoxProc,
Kermit.hInst);
DialogBox(Kermit.hInst,
MAKEINTRESOURCE(DT_KRM_CANCEL),hDlg,fp);
FreeProcInstance(fp);
}
else {
DestroyWindow(hDlg);
Kermit.hWndXfer = NULL;
}
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
static void NEAR krmInitRemoteBox(HWND hDlg)
{
char buf[80];
SendDlgItemMessage(hDlg, IDD_KRM_REMOTEDATA, WM_SETFONT,
GetStockObject(SYSTEM_FIXED_FONT), 0L);
SetDlgItemText(hDlg,IDD_KRM_BYTESMOVED, ultoa(Kermit.bytesmoved, buf, 10));
SetDlgItemText(hDlg, IDD_KRM_PACKETS, ultoa(Kermit.packetcount, buf, 10));
SetDlgItemText(hDlg,IDD_KRM_RETRIES, itoa(Kermit.totalretries, buf, 10));
}
/*
* krmCancelBoxProc
*
* Check the file transfer cancel mode
* and set the corresponding cancel flag
*/
BOOL FAR PASCAL krmCancelBoxProc(HWND hDlg, unsigned message,
WORD wParam, LONG lParam)
{
switch (message) {
case WM_INITDIALOG:
CheckRadioButton(hDlg,IDD_KRM_CANCELFILE, IDD_KRM_CANCELPROTOCOL,
IDD_KRM_CANCELFILE);
break;
case WM_COMMAND: /* system command */
switch (wParam) {
case IDD_KRM_CANCELFILE:
case IDD_KRM_CANCELBATCH:
case IDD_KRM_CANCELERROR:
case IDD_KRM_CANCELPROTOCOL:
CheckRadioButton(hDlg, IDD_KRM_CANCELFILE,
IDD_KRM_CANCELPROTOCOL, wParam);
break;
case IDOK:
krmSetCancelFlags(hDlg);
EndDialog(hDlg,TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE; /* windows will handle this */
}
break;
default:
return FALSE; /* and, windows will process this as well */
}
return TRUE; /* if we process message, return TRUE */
}
/*
* krmSetCancelFlags
*
* Set the file transfer cancel flags
* chosen by the user
*/
static void NEAR krmSetCancelFlags(HWND hDlg)
{
register int i;
register WORD param;
for (i = IDD_KRM_CANCELFILE; i <= IDD_KRM_CANCELPROTOCOL; i++) {
if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L)) {
switch(i) {
default:
case IDD_KRM_CANCELFILE:
param = IDM_KRM_FILEABORT;
break;
case IDD_KRM_CANCELBATCH:
param = IDM_KRM_BATCHABORT;
break;
case IDD_KRM_CANCELERROR:
param = IDM_KRM_ERRORABORT;
break;
case IDD_KRM_CANCELPROTOCOL:
param = IDM_KRM_CANCEL;
break;
}
SendMessage(Kermit.hWnd, WM_COMMAND, param, 0L);
break;
}
}
}
BOOL FAR PASCAL krmCWD(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
{
switch(message) {
case WM_INITDIALOG:
krmCWDInit(hDlg);
break;
case WM_COMMAND:
switch(wParam) {
case IDOK:
EndDialog(hDlg, krmCWDSet(hDlg));
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
static void NEAR krmCWDInit(HWND hDlg)
{
SendDlgItemMessage(hDlg,IDD_KRM_FILENAME,EM_LIMITTEXT,KRM_MAXDATALEN,0L);
SendDlgItemMessage(hDlg,IDD_KRM_PASSWORD,EM_LIMITTEXT,KRM_MAXDATALEN,0L);
}
static HANDLE NEAR krmCWDSet(HWND hDlg)
{
register int len1, len2;
len1 = (int)SendDlgItemMessage(hDlg,IDD_KRM_FILENAME,
WM_GETTEXTLENGTH,0,0L);
len2 = (int)SendDlgItemMessage(hDlg,IDD_KRM_PASSWORD,
WM_GETTEXTLENGTH,0,0L);
Kermit.hFilelist = LocalAlloc(LPTR, len1 + len2 + 4);
if (Kermit.hFilelist != NULL) {
Kermit.pFilelist = LocalLock(Kermit.hFilelist);
*Kermit.pFilelist = 'C';
*(Kermit.pFilelist + 1) = (BYTE)tochar(len1);
GetWindowText(GetDlgItem(hDlg, IDD_KRM_FILENAME),
Kermit.pFilelist + 2, len1 + 1);
*(Kermit.pFilelist + len1 + 2) = (BYTE)tochar(len2);
GetWindowText(GetDlgItem(hDlg, IDD_KRM_PASSWORD),
Kermit.pFilelist + len1 + 3, len2 + 1);
}
return (Kermit.hFilelist);
}
BOOL FAR PASCAL krmRemote1ParamCmd(register HWND hDlg, unsigned message,
register WORD wParam, LONG lParam)
{
switch(message) {
case WM_INITDIALOG:
krmRemote1ParamInit(hDlg, Kermit.mode);
break;
case WM_COMMAND:
switch(wParam) {
case IDD_KRM_FILENAME:
if (HIWORD(lParam) == EN_CHANGE)
krmRemote1ParamEnable(hDlg,LOWORD(lParam),Kermit.mode);
break;
case IDOK:
EndDialog(hDlg, krmRemote1ParamSet(hDlg, Kermit.mode));
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
static void NEAR krmRemote1ParamInit(register HWND hDlg, int mode)
{
char buf[80];
SendDlgItemMessage(hDlg,IDD_KRM_FILENAME,EM_LIMITTEXT,KRM_MAXDATALEN,0L);
switch(mode) {
case IDM_KRM_REMOTETYPE:
LoadString(Kermit.hInst, IDS_KRM_REMOTETYPE, buf, sizeof(buf));
SetWindowText(hDlg, buf);
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
break;
case IDM_KRM_REMOTEHELP:
LoadString(Kermit.hInst, IDS_KRM_REMOTEHELP, buf, sizeof(buf));
SetWindowText(hDlg, buf);
LoadString(Kermit.hInst, IDS_KRM_HELPTOPIC, buf, sizeof(buf));
SetDlgItemText(hDlg, IDD_KRM_EDITTITLE, buf);
break;
case IDM_KRM_REMOTEDIR:
LoadString(Kermit.hInst, IDS_KRM_REMOTEDIR, buf, sizeof(buf));
SetWindowText(hDlg, buf);
break;
case IDM_KRM_REMOTECOMMAND:
LoadString(Kermit.hInst, IDS_KRM_REMOTECOMMAND, buf, sizeof(buf));
SetWindowText(hDlg, buf);
LoadString(Kermit.hInst, IDS_KRM_CMDTOPIC, buf, sizeof(buf));
SetDlgItemText(hDlg, IDD_KRM_EDITTITLE, buf);
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
break;
case IDM_KRM_REMOTEERASE:
LoadString(Kermit.hInst, IDS_KRM_REMOTEERASE, buf, sizeof(buf));
SetWindowText(hDlg, buf);
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
break;
case IDM_KRM_REMOTESPACE:
LoadString(Kermit.hInst, IDS_KRM_REMOTESPACE, buf, sizeof(buf));
SetWindowText(hDlg, buf);
LoadString(Kermit.hInst, IDS_KRM_SPACETOPIC, buf, sizeof(buf));
SetDlgItemText(hDlg, IDD_KRM_EDITTITLE, buf);
break;
case IDM_KRM_REMOTEWHO:
LoadString(Kermit.hInst, IDS_KRM_REMOTEWHO, buf, sizeof(buf));
SetWindowText(hDlg, buf);
LoadString(Kermit.hInst, IDS_KRM_WHOTOPIC, buf, sizeof(buf));
SetDlgItemText(hDlg, IDD_KRM_EDITTITLE, buf);
break;
case IDM_KRM_GET:
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
setoemconvert(hDlg, IDD_KRM_FILENAME);
break;
}
}
static HANDLE NEAR krmRemote1ParamSet(register HWND hDlg, int mode)
{
switch (mode) {
case IDM_KRM_REMOTETYPE:
return krmRemote1ParamGeneric(hDlg, 'T');
case IDM_KRM_REMOTEHELP:
return krmRemote1ParamGeneric(hDlg, 'H');
case IDM_KRM_REMOTEDIR:
return krmRemote1ParamGeneric(hDlg, 'D');
case IDM_KRM_REMOTEWHO:
return krmRemote1ParamGeneric(hDlg, 'W');
case IDM_KRM_REMOTEERASE:
return krmRemote1ParamGeneric(hDlg, 'E');
case IDM_KRM_REMOTESPACE:
return krmRemote1ParamGeneric(hDlg, 'U');
case IDM_KRM_REMOTECOMMAND:
case IDM_KRM_GET:
return krmRemote1ParamCommand(hDlg);
break;
}
}
static HANDLE NEAR krmRemote1ParamCommand(HWND hDlg)
{
register int len;
len = (int)SendDlgItemMessage(hDlg,IDD_KRM_FILENAME,WM_GETTEXTLENGTH,0,0L);
Kermit.hFilelist = LocalAlloc(LPTR, len + 1);
if (Kermit.hFilelist != NULL) {
Kermit.pFilelist = LocalLock(Kermit.hFilelist);
GetWindowText(GetDlgItem(hDlg, IDD_KRM_FILENAME),
Kermit.pFilelist, len + 1);
}
return (Kermit.hFilelist);
}
static HANDLE NEAR krmRemote1ParamGeneric(HWND hDlg, char cmd)
{
register int len;
len = (int)SendDlgItemMessage(hDlg,IDD_KRM_FILENAME,WM_GETTEXTLENGTH,0,0L);
Kermit.hFilelist = LocalAlloc(LPTR, len + 3);
if (Kermit.hFilelist != NULL) {
Kermit.pFilelist = LocalLock(Kermit.hFilelist);
*Kermit.pFilelist = cmd;
*(Kermit.pFilelist + 1) = (BYTE)tochar(len);
GetWindowText(GetDlgItem(hDlg, IDD_KRM_FILENAME),
Kermit.pFilelist + 2, len + 1);
}
return (Kermit.hFilelist);
}
static void NEAR krmRemote1ParamEnable(HWND hDlg, HWND hctl, int mode)
{
register int count;
if ((mode == IDM_KRM_REMOTETYPE) ||
(mode == IDM_KRM_REMOTECOMMAND) ||
(mode == IDM_KRM_GET) ||
(mode == IDM_KRM_REMOTEERASE)) {
count = (int)SendMessage(hctl,WM_GETTEXTLENGTH,0,0L);
EnableWindow(GetDlgItem(hDlg, IDOK), count);
}
}
/*
* GetComboboxSelection
*
* Utility function for combo boxes
* Finds the highlighted string and returns its value.
*
*/
static int NEAR GetComboboxSelection(HWND hDlg, WORD id, char * buffer)
{
register int index;
index = (int)SendDlgItemMessage(hDlg, id, CB_GETCURSEL, 0, 0L);
if (index != CB_ERR)
index = (int)SendDlgItemMessage(hDlg, id, CB_GETLBTEXT,
index, (LONG)(LPSTR)buffer);
return index;
}
/*
* GetComboBoxIndex
*
* Utility function for combo boxes
* Get the index of the current selection
*/
static int NEAR GetComboboxIndex(HWND hDlg, int id)
{
return (int)SendDlgItemMessage(hDlg, id, CB_GETCURSEL, 0, 0L);
}
/*
* GetCheckedRadioButton
*
* Utility function for radio buttons
* Finds the checked button, if any, in a group
* of radio buttons. If none, then returns highest value
* of the range plus 1
*/
static int NEAR GetCheckedRadioButton(HWND hDlg, WORD start, WORD end)
{
register WORD i;
for (i = start; i <= end; i++)
if (SendDlgItemMessage(hDlg, i, BM_GETCHECK, 0, 0L))
break;
return i;
}
/*
* getnamestr
*
* Utility function to parse a path name for a file name
*/
static char* NEAR getnamestr(char *str, int len)
{
char *tmp;
tmp = str + len;
while ((*tmp != ':') && (*tmp != '\\') && (tmp > str))
tmp--;
if (*tmp != ':' && *tmp != '\\')
return(tmp);
else
return(tmp + 1);
}
/*
* krmLocalFiles
*
* Dialog box to provide local directory services
*/
BOOL FAR PASCAL krmLocalFiles(HWND hDlg, unsigned message,
WORD wParam, LONG lParam)
{
switch(message) {
case WM_INITDIALOG:
krmLocalInit(hDlg);
break;
case WM_COMMAND:
switch(wParam) {
case IDD_KRM_LOCALDIRS:
krmLocalDirs(hDlg, lParam);
break;
case IDOK:
krmLocalFilesOK(hDlg);
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}
/*
* krmLocalFilesOK
*
* Execute a directory change in krmLocalFiles dialog
*/
static void NEAR krmLocalFilesOK(HWND hDlg)
{
char buf[MAXPATHLEN];
GetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT,buf,sizeof(buf));
DlgDirList(hDlg, buf, IDD_KRM_LOCALFILES,IDD_KRM_LOCALPATH, 0);
DlgDirList(hDlg, buf, IDD_KRM_LOCALDIRS,IDD_KRM_LOCALPATH, 0xC010);
SetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT, buf);
SendDlgItemMessage(hDlg, IDD_KRM_LOCALPATHEDIT, EM_SETSEL, 0,
MAKELONG(0, 32767));
}
/*
* krmLocalInit
*
* Initialize the krmLocalFiles dialog
*/
static void NEAR krmLocalInit(HWND hDlg)
{
DlgDirList(hDlg, defstring, IDD_KRM_LOCALFILES,IDD_KRM_LOCALPATH, 0);
DlgDirList(hDlg, defstring, IDD_KRM_LOCALDIRS,IDD_KRM_LOCALPATH, 0xC010);
SetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT, defstring);
SendDlgItemMessage(hDlg,IDD_KRM_LOCALPATHEDIT,EM_LIMITTEXT,MAXPATHLEN, 0L);
setoemconvert(hDlg, IDD_KRM_LOCALPATHEDIT);
}
/*
* krmLocalDirs
*
* Change the edit box display and directory in krmLocalDirs dialog
*/
static void NEAR krmLocalDirs(HWND hDlg, LONG lParam)
{
char buf[MAXPATHLEN];
char str[MAXPATHLEN];
int len;
if (HIWORD(lParam) == LBN_SELCHANGE) {
len = GetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT,str,sizeof(buf) - 13);
DlgDirSelect(hDlg, (LPSTR)buf, IDD_KRM_LOCALDIRS);
if (strchr(str,'*') || strchr(str,'?'))
strcat(buf,getnamestr(str,len));
else
strcat(buf, defstring);
SetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT, (LPSTR)buf);
}
else if (HIWORD(lParam) == LBN_DBLCLK) {
GetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT,buf,sizeof(buf));
DlgDirList(hDlg, buf, IDD_KRM_LOCALFILES,IDD_KRM_LOCALPATH, 0);
DlgDirList(hDlg, buf, IDD_KRM_LOCALDIRS,IDD_KRM_LOCALPATH, 0xC010);
SetDlgItemText(hDlg, IDD_KRM_LOCALPATHEDIT, buf);
}
}
/*
* setoemconvert
*
* Utility function to set an edit box to ES_OEMCONVERT style
*/
static void NEAR setoemconvert(HWND hDlg, WORD id)
{
HWND hctl;
LONG style;
hctl = GetDlgItem(hDlg, id);
style = GetWindowLong(hctl, GWL_STYLE);
style |= ES_OEMCONVERT;
SetWindowLong(hctl, GWL_STYLE, style);
}